package br.edu.fucapi.remo.control.mb;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import br.edu.fucapi.remo.model.bean.Associado;
import br.edu.fucapi.remo.model.bean.Usuario;
import br.edu.fucapi.remo.model.dao.DAO;
import br.edu.fucapi.remo.model.dao.UsuarioDAO;
import br.edu.fucapi.remo.util.Constantes;

@ViewScoped
@ManagedBean
public class UsuarioBean{
	private Usuario usuario = new Usuario();
	private List<Usuario> usuarios;
	private Integer idAssociado;
	
	private UsuarioDAO usuarioDAO = new UsuarioDAO();
	
	@PostConstruct
	public void carregarUsuarios(){
		usuarios = new DAO<Usuario>(Usuario.class)
					.listaTodos();
	}
	
	public Usuario getUsuario() {
		return usuario;
	}

	public List<Usuario> getUsuarios() {
		return usuarios;
	}
	
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
	public void pesquisarUsuario(){
		usuarios = usuarioDAO.pesquisar(usuario);
	}
	
	public String salvar(){
		DAO<Usuario> dao = new DAO<Usuario>(Usuario.class);
		
		DAO<Associado> daoAssociado = new DAO<Associado>(Associado.class);
		//Carregando dados do associado
		Associado associado = daoAssociado.buscaPorId(idAssociado);
		usuario.setAssociado(associado);
		try {
			if (usuario.getIdUsuario() == null) {
				dao.adiciona(usuario);
				FacesMessage message = new FacesMessage(Constantes.SUCESSO_INCLUSAO);
		        FacesContext.getCurrentInstance().addMessage("mensagens", message);
			} else {
				dao.atualiza(usuario);
				FacesMessage message = new FacesMessage(Constantes.SUCESSO_ALTERACAO);
		        FacesContext.getCurrentInstance().addMessage("mensagens", message);
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		this.usuario = new Usuario();
		this.usuarios = dao.listaTodos();
		return "usuarioList";
	}
	
	
	public Integer getIdAssociado() {
		return idAssociado;
	}

	public void setIdAssociado(Integer idAssociado) {
		this.idAssociado = idAssociado;
	}

	public void remover(){
		DAO<Usuario> dao = new DAO<Usuario>(Usuario.class);
		dao.remove(this.usuario);
		FacesMessage message = new FacesMessage(Constantes.SUCESSO_EXCLUSAO);
        FacesContext.getCurrentInstance().addMessage("mensagens", message);
		this.usuario = new Usuario();
		this.usuarios = dao.listaTodos();
	}
}